package com.stone.java8;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;


/**
 * desc   : 构造方法引用
 * author : stone
 * email  : aa86799@163.com
 * time   : 13/03/2017 17 54
 */
public class ConsMethodReferenceActi extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

//        Collections.sort(ArrayList::new);  //有问题
//        Collections.sort(new ArrayList<String>());  //没问题  参数为List接口

        /*
        构造方法引用
        Person::new  指代接口GetType<Person>，
        因接口中的方法，需要用到参数int， 所以会匹配 int参数的构造方法
         */
        getPerson("li si", value -> new Person(value));//lambda
        getPerson("zhang san", Person::new);//会调用new Person(String name)     指代GetType

        getPerson(() -> new Person());
        getPerson(Person::new);//会调用new Person()   指代GetType2
    }

    static class Person {

        public Person() {

        }

        public Person(String name) {
            this.name = name;
        }

        String name;

    }


    public interface GetType<T> {
        T get(String value);
    }

    public interface GetType2<T> {
        T get();
    }

    public Person getPerson(String name, GetType<Person> data) {
        return data.get(name);
    }

    public Person getPerson(GetType2<Person> data) {
        return data.get();
    }
}
